package com.afdor.rws.event;

import com.afdor.rws.annotation.extension.SPI;
import com.afdor.rws.event.config.EventConfig;
import lombok.NonNull;

/**
 * 事件持久化管理器
 *
 * @author 悭梵
 * @date Created in 2018-08-20 16:46
 */
@SPI("default")
public interface EventPersistenceManager {
    /**
     * 获取配置信息
     *
     * @return
     */
    @NonNull
    EventConfig getConfig();

    /**
     * 设置配置信息
     *
     * @param config
     */
    @NonNull
    EventPersistenceManager setConfig(@NonNull EventConfig config);

    /**
     * 事件持久化处理器
     *
     * @return
     */
    @NonNull
    EventPersistenceHandler getEventPersistenceHandler();

    /**
     * 事件持久化处理器
     *
     * @return
     */
    @NonNull
    EventPersistenceManager setEventPersistenceHandler(@NonNull EventPersistenceHandler persistenceHandler);

    /**
     * 初始化
     *
     * @return
     */
    @NonNull
    EventPersistenceManager init();

    /**
     * 添加需要持久化的执行事件
     *
     * @param events
     */
    EventPersistenceManager addEvent(Event... events);

    /**
     * 停止执行
     */
    void destroy();
}
